package com.ruoyi.module.service;

import com.ruoyi.module.domain.Order;
import com.ruoyi.module.po.OrderDeliveryPo;
import com.ruoyi.module.po.OrderPo;
import com.ruoyi.module.vo.OrderVo;

import java.math.BigDecimal;
import java.util.List;

/**
 * 订单Service接口
 *
 * @author fubojin
 * @date 2024-12-06
 */
public interface IOrderService
{
    /**
     * 查询订单
     *
     * @param id 订单主键
     * @return 订单
     */
    public Order selectOrderById(Long id);

    /**
     * 根据订单单号查询订单
     * @param orderNo 订单单号
     * @return 订单信息
     */
    public Order selectOrderByOrderNo(String orderNo);
    /**
     * 查询订单列表
     *
     * @param order 订单
     * @return 订单集合
     */
    public List<Order> selectOrderList(Order order);
    /**
     * 网页订单查询
     *
     * @param order 订单
     * @return 订单集合
     */
    public List<Order> selectOrderWebList(Order order);

    /**
     * 查询订单列表（销售订单）
     *
     * @param order 订单
     * @return 订单集合
     */
    public List<Order> distributeList(Order order);

    /**
     * 查询订单列表（订单明细）
     *
     * @param order 订单
     * @return 订单集合
     */
    public List<Order> detailedList(Order order);

    /**
     * 新增订单
     *
     * @param order 订单
     * @return 结果
     */
    public Order insertOrder(Order order);

    /**
     * 修改订单
     *
     * @param order 订单
     * @return 结果
     */
    public int updateOrder(Order order);

    /**
     * 批量删除订单
     *
     * @param ids 需要删除的订单主键集合
     * @return 结果
     */
    public int deleteOrderByIds(Long[] ids);

    /**
     * 删除订单信息
     *
     * @param id 订单主键
     * @return 结果
     */
    public int deleteOrderById(Long id);

    /**
     * 通过订单录入人查询订单
     * @param enterOrderUserId 录入人
     * @return
     */
    List<Order> orderByEnterUserIdList(Long enterOrderUserId);


    /**
     * 发货
     * 设置分销订单单号 和 修改订单状态
     * 及 待到账资金处理
     */
    void setDeliveryNo(OrderDeliveryPo orderDeliveryPo);

    /**
     *  确认收货
     */
    void setSignForReceipt(Long goodsId);

    /**
     *  改变订单评论状态
     */
    void updateOrderEvaluate(Long goodsId);

    /**
     * 取消订单
     *
     * @param id 主键
     */
    void cancelOrder(Long id);

    /**
     * 订单结算
     */
    List<OrderVo> orderSettlement(OrderPo orderPo);

    /**
     * 用户转移
     * transferUserId 需转移的录入人用户ID
     * userId 用户id(转移到此用户)
     */
    void userTransfer(Long userId, Long transferUserId, Long companyId);

    /**
     * 取消订单发货审核通过
     */
    void cancelOrderToAdopt(Long id);

    /**
     * 订单退款
     */
    void orderTK(String orderNo);

    /**
     * 取消订单发货审核不通过
     */
    void cancelOrderNotAdopt(Long id, String reasonForCancel);

    /**
     * 退货
     */
    void refundOrder(Order order);

}
